home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / C64 / T-TPUG Old Monthly Disks / (c)t9.d64 / dir list sort.c (.txt) < prev    next >
Commodore BASIC  |  2007-02-04  |  10KB  |  361 lines

  1. 100 POKE53280,6:POKE53281,6
  2. 150 PRINT"[147]DISK DIRECTORY SORT/LIST":PRINT"BY DOUGLASS E GOULEY.";
  3. 200 PRINT"      MARCH 1984.[146]"
  4. 250 PRINT"    TPUG # 4300"
  5. 300 PRINT"HELLO, PLEASE ENTER TO-DAY'S DATE"
  6. 350 PRINT"(ANY FORMAT WILL DO)"
  7. 400 INPUT"   15 MARCH 1984.[157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157][157]";DA$
  8. 450 PRINT"THANK YOU[146]"
  9. 500 PRINT"[147]THE PRINTER ROUTINE USES"
  10. 550 PRINT"PRINT#4,4    FOR CBM OPTION."
  11. 600 PRINT"PRINT#128,4  FOR OTHER OPTION."
  12. 650 PRINT"CHOSE A PRINTER OPTION :-"
  13. 700 PRINT"C = CBM."
  14. 750 PRINT"O = OTHER."
  15. 800 INPUT"    O[157][157][157]";TP$
  16. 850 PRINT"THANK YOU[146]"
  17. 900 INPUT" INSTRUCTIONS (Y/N)  N[157][157][157]";Q$
  18. 950 IF Q$ = "N" THEN 2300
  19. 1000 PRINT"[147]THIS PROGRAMME WILL ASK YOU TO FEED IN"
  20. 1050 PRINT"EACH OF YOUR 1541 DISKETTES ONE AT A"
  21. 1100 PRINT"TIME.  THE COMPUTER WILL READ THE"
  22. 1150 PRINT"DIRECTORY INTO A TABLE."
  23. 1200 PRINT"AT THE END OF EACH DISKETTE YOU WILL BE"
  24. 1250 PRINT"ASKED IF THERE ARE ANY MORE DISKETTES"
  25. 1300 PRINT"TO BE READ.  RESPOND Y/N."
  26. 1350 PRINT"AFTER ALL DISKETTES HAVE BEEN READ, YOU"
  27. 1400 PRINT"WILL BE GIVEN THE OPTIONS :-          "
  28. 1450 PRINT"-> PRINTER LISTING AS ENTERED,OR SORTED"
  29. 1500 PRINT"-> SORT BY DISK-ID THEN PRINT HARD-COPY"
  30. 1550 PRINT"-> SORT BY PROGRAMME NAME THEN PRINT       HARD-COPY."
  31. 1552 PRINT"-> FIND ANY PROGRAMME/FILE."
  32. 1554 PRINT"-> SAVE THE ACCUMULATED PROG/FILE NAMES    TO DISK."
  33. 1556 PRINT"-> READ THE ACCUMULATED PROG/FILE NAMES    FROM DISK."
  34. 1600 PRINT"-> QUIT.!"
  35. 1650 PRINT"MULTIPLE CHOICES ARE ALLOWED"
  36. 1750 PRINT"IF THE COMPUTER PAUSES,GIVE IT TIME  TO THINK !"
  37. 1800 INPUT"PRESS RETURN TO CONTINUE-";Q$
  38. 1850 PRINT"[147] "
  39. 1900 PRINT"WATCH THE FREE BYTE[146] DISPLAY TO SEE IF"
  40. 1950 PRINT"YOU STILL HAVE ROOM TO INSERT DISKETTES."
  41. 2000 PRINT"RESERVE ABOUT 100 BYTES FOR THE SORT."
  42. 2050 PRINT"MANY THANKS TO 'COMPUTE!' FOR THE IDEA, AND"
  43. 2100 PRINT"TO LORNA MCCARNEY FOR HER TYPING SKILLS."
  44. 2102 PRINT"TO AL SCARLETT FOR THE LOAN OF HIS      PROGRAMMING MANUALS."
  45. 2150 PRINT"IF THE COMPUTER PAUSES,GIVE IT TIME TO ":PRINT"THINK !"
  46. 2200 INPUT"PRESS RETURN TO CONTINUE-";Q$
  47. 2245 :
  48. 2250 DIMS9(20,2)  : REM SORT TABLE.
  49. 2300 DIMI$(900)   : REM MAX TABLE ENTRY
  50. 2318 :
  51. 2320 POKE53280,1:POKE53281,1
  52. 2350 PRINT"[147]"
  53. 2352 PRINT"DO YOU WISH TO LOAD A PREVIOULSY SAVED  FILE OF NAMES (Y/N)"
  54. 2354 INPUT"    N[157][157][157]";Q$
  55. 2358 IF Q$ = "Y" THEN 15000
  56. 2400 INPUT"INSERT FIRST DISKETTE, PLEASE.(RETURN)"; RQ$:RQ$="":Q$=""
  57. 2450 DN=0
  58. 2500 DN=DN+1:PRINT"READING DISK DIRECTORY NUMBER";DN;"."
  59. 2550 OPEN3,8,0,"$0":GET#3,D1$,D2$
  60. 2600 GET#3,D1$,D2$:GET#3,D1$,D2$:N=0
  61. 2650 IF LEFT$(N$,3)  ="USR" THEN 2900
  62. 2700 IF LEFT$(N$,3)  ="PRG" THEN 2900
  63. 2750 IF LEFT$(N$,3)  ="SEQ" THEN 2900
  64. 2800 IF LEFT$(N$,3)  ="REL" THEN 2900
  65. 2850 K$=LEFT$(N$,2):K$=K$+" " :REM PRINTK$
  66. 2900 IFD1$<>""THENN=ASC(D1$)
  67. 2950 IFD2$<>""THENN=N+ASC(D2$)*256
  68. 3000 GET#3,D2$:IFST<>0THEN3500
  69. 3050 IFD2$<>CHR$(34)THEN3000
  70. 3100 GET#3,D2$:IFD2$<>CHR$(34)THENI$(P)=I$(P)+D2$:GOTO3100
  71. 3150 GET#3,D2$:IFD2$=CHR$(32)THEN3150
  72. 3200 N$=""
  73. 3250 N$=N$+D2$:GET#3,D2$:IFD2$<>""THEN3250
  74. 3300 PRINTN;" ";I$(P),N$,P
  75. 3350 I$(P) = K$+I$(P)
  76. 3400 REM PRINTI$(P)  DEBUG AID.
  77. 3450 IFST=0THEN3550
  78. 3500 CLOSE3:GOTO 5650
  79. 3550 :
  80. 3600 P=P+1:GOTO2600
  81. 3650 GOSUB 7450 : REM FIX TABLE.
  82. 3700 GOTO 4400
  83. 3750 :
  84. 3800 REM  PRINT TO SCREEN.
  85. 3850 PRINT:PRINT"ID  PROG/FILE NAME "
  86. 3900 I=0:K=0
  87. 3950 I = I + 1
  88. 4000 K = K + 1
  89. 4050 IF I > P THEN 4350
  90. 4100 IF K > P THEN 4350
  91. 4150 PRINT I$(I)
  92. 4200 IF K < 20 THEN 3950
  93. 4250 INPUT"PRESS RETURN TO CONTINUE-";Q$
  94. 4300 K=0:GOTO 3950
  95. 4350 RETURN
  96. 4400 PRINT"FREE BYTES =";:GOSUB7250:PRINTM
  97. 4450 PRINT"TOTAL NUMBER PROGS (INCL DISK HDR) =";P
  98. 4500 REM  CHOICES
  99. 4550 PRINT"PLEASE CHOOSE AN OPTION :-"
  100. 4600 PRINT"1. SCREEN LIST DIRECTORYS AS ENTERED."
  101. 4650 PRINT"2. PRINTER LIST DIRECTORYS AS ENTERED."
  102. 4700 PRINT"3. SORT BY DISK-ID THEN PRINTER LIST. "
  103. 4750 PRINT"4. SORT BY PROGRAME/FILE THEN PRINTER      LIST. "
  104. 4800 PRINT"   # 4  WILL GIVE YOU A CROSS REFERENCE"
  105. 4850 PRINT"   TO DISK-ID."
  106. 4900 PRINT"5. SCREEN LIST SORTED BY DISK-ID."
  107. 4950 PRINT"6. SCREEN LIST SORTED BY PROG/FILE."
  108. 5000 PRINT"7. QUIT.[146]"
  109. 5010 PRINT"8. FIND PARTICULAR PROG/FILE."
  110. 5015 PRINT"9. SAVE THE CURRENT TABLE OF NAMES TO      DISK."
  111. 5050 PRINT"NOTE: YOU WILL BE RETURNED TO THIS MENU."
  112. 5100 INPUT"CHOICE  4[157][157][157]";Q$:PT$=Q$
  113. 5150 IF Q$="1" THEN 9750
  114. 5200 IF Q$="2" THEN 10150
  115. 5250 IF Q$="3" THEN 10450
  116. 5300 IF Q$="4" THEN 10800
  117. 5350 IF Q$="5" THEN 11300
  118. 5400 IF Q$="6" THEN 11850
  119. 5450 IF Q$="7" THEN 11150
  120. 5452 IF Q$="8" THEN 14000
  121. 5454 IF Q$="9" THEN 16000
  122. 5500 PRINT"SORRY, PLS PICK AGAIN (OPTION 1-9 ONLY)...":GOTO5100
  123. 5550 GOTO 5600
  124. 5600 PRINT"FINISHED, BYE...": END
  125. 5650 :
  126. 5652 IF DN = 10 THEN 5700
  127. 5654 IF DN = 20 THEN 5700
  128. 5656 IF DN = 30 THEN 5700
  129. 5658 IF DN = 40 THEN 5700
  130. 5660 IF DN = 50 THEN 5700
  131. 5665 IF DN > 59 THEN 5700
  132. 5670 GOTO 5750
  133. 5700 PRINT"FREE BYTES =[146]";:GOSUB 7250:PRINTM
  134. 5750 INPUT"ANY MORE DISKS TO FEED IN  Y/N)[146] Y[157][157][157]";Q$
  135. 5800 IF Q$="Y" THEN 5900
  136. 5850 GOTO 3650
  137. 5900 INPUT"[144][151] INSERT NEXT DISKETTE THEN PRESS RETURN [152][146].";Q$
  138. 5950 REM       PRINT"[146]FREE BYTES =";:GOSUB 4200:PRINTM
  139. 6000 GOTO 2500
  140. 6050 :
  141. 6100 REM PRINTER (HARD-COPY) ROUTINE.
  142. 6150 :
  143. 6200 IF TP$ = "O" THEN 6400 : REM EPSON
  144. 6250 GOSUB 1245             0: REM CBM
  145. 6300 RETURN
  146. 6350 :
  147. 6400 REM NON-CBM PRINTER (EPSON !!).
  148. 6450 OPEN128,4
  149. 6500 PRINT#128,       CHR$(27);"@"
  150. 6550 PRINT#128,CHR$(7)CHR$(27);"@";" "
  151. 6600 PRINT#128,CHR$(14)"DISK DIRECTORYS AS AT ";DA$
  152. 6650 PRINT#128,CHR$(27)" "
  153. 6700 PRINT#128,CHR$(27)CHR$(15)"ID   PROGRAMME/FILE";"            CHOICE =";CH$
  154. 6750 PRINT#128,CHR$(27);"@";"  "
  155. 6800 FOR I = 1 TO P
  156. 6850 PRINT#128,CHR$(18)  I$(I)
  157. 6900 NEXT I
  158. 6950 PRINT#128,"  ": PRINT#128,"FREE BYTES =";:GOSUB 7250: PRINT#128,M
  159. 7000 PRINT#128,"TOTAL NUMBER PROGS (INCL DISK HDR) =";P
  160. 7050 PRINT#128,"NUMBER DISKETTES READ =";DN
  161. 7100 PRINT#128
  162. 7150 PRINT#128,"FINISHED, BYE..." :CLOSE 128
  163. 7200 RETURN
  164. 7250 REM   CALC FREE BYTES.
  165. 7300 M = FRE(0)-(FRE(0)<0)*65536
  166. 7350 :
  167. 7400 RETURN
  168. 7450 :
  169. 7500 REM   FIX THE 1ST TWO BYTES OF THE TABLE RE:- DISK ID CARRIES OVER 1 TOO
  170. 7550 REM  MANY.
  171. 7600 :
  172. 7650 PRINT"ONE MOMENT PLEASE...":     GOSUB 7250
  173. 7700 E$="":Q=0:V$="":C$="":W=0:W1=0
  174. 7750 P=P-1 : F$=I$(P)
  175. 7800 FOR I = 1 TO P
  176. 7850 Q = I + 1
  177. 7900 IF Q >(P) THEN 8350
  178. 7950 V$=I$(Q)    : REM NEXT TABLE ENTRY
  179. 8000 C$=I$(I)    : REM CURR TABLE ENTRY
  180. 8050 IF LEFT$(C$,2) = LEFT$(V$,2) THEN       8300
  181. 8100 W=LEN(V$)
  182. 8150 W1 = W - 4
  183. 8200 E$=LEFT$(V$,2)+"[160]"+MID$(C$,4)
  184. 8250 I$(I) = E$
  185. 8300 NEXT I
  186. 8350 I$(P)=F$
  187. 8400 RETURN
  188. 8450 REM  SORT ROUTINE
  189. 8500 I1=1:J1=P:A=0:T$=""
  190. 8550 I=I1:J=J1:S=-1
  191. 8600 :
  192. 8650 IF PT$ = "4" OR PT$ = "6" THEN 8800
  193. 8700 IF I$(I) <= I$(J)    THEN 9000
  194. 8750 GOTO 8850
  195. 8800 IF MID$(I$(I),4) <= MID$(I$(J),4)       THEN 9000
  196. 8850 T$=I$(I) : I$(I)=I$(J) : I$(J)=T$
  197. 8900 PRINT"SORTING..";
  198. 8950 S = SGN(-S)
  199. 9000 IF S=1 THEN 9100
  200. 9050 J=J-1 : GOTO 9150
  201. 9100 I=I+1
  202. 9150 IF I<J THEN 8600
  203. 9200 IF I+1 >= J1 THEN 9300
  204. 9250 A=A+1 : S9(A,1)=I+1 : S9(A,2)=J1
  205. 9300 J1 = I-1
  206. 9350 IF I1<J1 THEN 8550
  207. 9400 IF A=0 THEN 9550
  208. 9450 I1 = S9(A,1) : J1 = S9(A,2) : A=A-1
  209. 9500 GOTO 8550
  210. 9550 REM SORT FINISHED SO PRINTER.
  211. 9600 PRINT" ":PRINT " SORT FINISHED (QUICK-SORT METHOD USED)[146]"
  212. 9650 REM DEBUG  GOSUB 3555
  213. 9700 RETURN
  214. 9750 REM CHOICE 1 = CRT LIST AS ENTERED
  215. 9800 CH$= "PRINT TO SCREEN AS ENTERED."
  216. 9850 PRINT"";CH$;"[145] "
  217. 9900 GOSUB 3750
  218. 9950 INPUT"PRESS RETURN TO CONTINUE-";Q$
  219. 10000 PRINT"[147]"
  220. 10050 GOTO 4500
  221. 10100 :
  222. 10150 REM CHOICE 2 = PRT LIST AS ENTERED
  223. 10200 CH$ = "PRINTER PROGS/FILES AS ENTERED."
  224. 10250 PRINT"[145] ";CH$;" [145]"
  225. 10300 GOSUB 6450
  226. 10350 GOTO 4500
  227. 10400 :
  228. 10450 REM CHOICE 3 = SORT/PRT BY DISK-ID
  229. 10500 CH$ = " 3. PRINTER PROGS/FILES SORTED BY DISK-ID."
  230. 10550 PRINT"[145] ";CH$;" [145]"
  231. 10600 GOSUB 8450 :PRINT"[145]"
  232. 10650 GOSUB 6050
  233. 10700 GOTO  4500
  234. 10750 :
  235. 10800 REM CHOICE 4 = SORT/PRT BY PROG/FILE
  236. 10850 CH$ = " 4. PRINTER PROGS/FILES SORTED BY PROGRAMME/FILE NAME."
  237. 10900 PRINT"[145] ";CH$;" [145]"
  238. 10950 GOSUB 8450 :PRINT"[145]"
  239. 11000 GOSUB 6050
  240. 11050 GOTO  4500
  241. 11100 :
  242. 11150 REM CHOICE 7 = QUIT.
  243. 11200 PRINT"THAT'S IT FOLKS."
  244. 11250 GOTO 5600
  245. 11300 :
  246. 11350 REM CHOICE 5 = SCREEN LIST SORTED BY DISK-ID.
  247. 11400 CH$ = "SCREEN  PROGS/FILES SORTED BY DISK-ID."
  248. 11450 PRINT"[145] ";CH$;" [145]"
  249. 11500 GOSUB 8450 :PRINT"[145]"
  250. 11550 PRINT"[145] ";CH$;" [145]"
  251. 11600 GOSUB 3750
  252. 11650 PRINT"ANY KEY TO CONTINUE..."
  253. 11700 GET Q$: IF Q$ =  "" THEN 11700
  254. 11750 GOTO  4500
  255. 11800 :
  256. 11850 :
  257. 11900 REM CHOICE 6 = SCREEN LIST SORTED BY PROG/FILE.
  258. 11950 CH$ = "SCREEN  PROGS/FILES SORTED BY PROG/FILE."
  259. 12000 PRINT"[145] ";CH$;" [145]"
  260. 12050 GOSUB 8450:PRINT"[145]"
  261. 12100 PRINT"[145] ";CH$;" [145]"
  262. 12150 GOSUB 3750
  263. 12200 PRINT"ANY KEY TO CONTINUE..."
  264. 12250 GET Q$: IF Q$ =  "" THEN 11700
  265. 12300 GOTO  4500
  266. 12350 :
  267. 12400 :
  268. 12450 REM PRINTER (HARD-COPY) ROUTINE.
  269. 12500 :
  270. 12550 REM     CBM PRINTER.
  271. 12600 :
  272. 12650 REM NON-CBM (EPSON), GOTO 6100  .
  273. 12700 :
  274. 12750 OPEN4,4
  275. 12800 PRINT#4,         CHR$(27);" "
  276. 12850 PRINT#4,CHR$(15)CHR$(15);" ";" "
  277. 12900 PRINT#4,CHR$(14)"DISK DIRECTORYS AS AT ";DA$
  278. 12950 PRINT#4,CHR$(15)" "
  279. 13000 PRINT#4,CHR$(15)CHR$(15)"ID PROGRAMME/FILE";" CHOICE =";CH$
  280. 13050 PRINT#4,CHR$(15);" ";"  "
  281. 13100 FOR I = 1 TO P
  282. 13150 PRINT#4,I$(I)
  283. 13200 NEXT I
  284. 13250 PRINT#4,"  ": PRINT#4,"FREE BYTES =";:GOSUB 7250: PRINT#4,M
  285. 13300 PRINT#4,"TOTAL NUMBER PROGS (INCL DISK HDR) =";P
  286. 13350 PRINT#4,"NUMBER DISKETTES READ =";DN
  287. 13400 PRINT#4
  288. 13450 PRINT#4,"FINISHED, BYE..." :CLOSE 4
  289. 13500 RETURN
  290. 14000 :
  291. 14010 :REM CHOICE 8 = FIND PROG/FILE.
  292. 14020 :
  293. 14100 PRINT"[147]YOU HAVE PICKED CHOICE 8 :-"
  294. 14110 PRINT"FIND A PARTICULAR PROGRAMME OR FILE.[146]"
  295. 14120 PRINT"USE THE FOLLOWING TECHNIQUE :-"
  296. 14130 PRINT"1. LOAD IN YOUR PREVIOUSLY SAVED           PROG/FILE TABLE"
  297. 14132 PRINT"   THEN USE OPTION X. (IN THE MENU)"
  298. 14135 PRINT:PRINT"OR,":PRINT
  299. 14140 PRINT"2. FEED IN ALL OF THE DISKETTES (WHICH  YOU MAY HAVE  JUST DONE)."
  300. 14200 PRINT"THEN PICK EITHER OPTION 4 OR 6 FROM THE MENU.  THIS WILL SORT THE FILE"
  301. 14250 PRINT"INTO ALPHA ORDER AND DISPLAY IT."
  302. 14300 PRINT"YOU CAN THEN LOCATE YOUR PROGRAMME/FILE."
  303. 14350 PRINT"THE SCREEN DISPLAY WILL PAUSE AFTER     EVERY 20 ENTRIES."
  304. 14400 INPUT"PRESS RETURN TO CONTINUE-";Q$
  305. 14500 GOTO 4550
  306. 15000 :
  307. 15010 REM LOAD A PREVIOUSLY SAVED FILE.
  308. 15020 :
  309. 15100 INPUT"WHAT FILENAME ";XN$
  310. 15200 PRINT"OK, I WILL TRY TO LOAD FILE ";XN$
  311. 15301 OPEN 15,8,15,"IO"
  312. 15305 GOSUB 17000 : REM DISK STATUS
  313. 15550 OPEN 2,8,2,"0:"+XN$+",S,R"
  314. 15560 GOSUB 17000
  315. 15600 PRINT "LOADING ";XN$
  316. 15610 INPUT#2,NE% : P = NE% :PRINT"NUMBER ENTRIES = ";P
  317. 15620 FOR I = 1 TO P+1
  318. 15630 INPUT#2,I$(I) : PRINTI$(I)
  319. 15660 NEXT I
  320. 15670 CLOSE 2
  321. 15680 PRINT"FINISHED READING ";P ;"RECORDS."
  322. 15700 GOTO 4500  : REM  MAIN MENU.
  323. 16000 :
  324. 16010 REM SAVE THE CURRENT TABLE OF NAMES.
  325. 16020 :
  326. 16040 CLOSE 15:   OPEN 15,8,15,"IO"
  327. 16100 GOSUB 17000 : REM DISK STATUS
  328. 16105 YN$="DEFAULT.DIRECTORY"
  329. 16110 PRINT"OK. I WILL CREATE A NEW DISK FILE TO    SAVE THE CURRENT TABLE"
  330. 16111 PRINT"OF NAMES."
  331. 16120 INPUT"WHAT FILENAME ";YN$
  332. 16200 PRINT"OK, I WILL WRITE    ";YN$:PRINT"TO DISK ..."
  333. 16300 :
  334. 16305 REM I$(1) = "TT TEST" : P = 1
  335. 16306 REM I$(2) = "TT TEST2" : P = 2
  336. 16310 OPEN 2,8,2,"0:"+YN$+",S,W"
  337. 16320 GOSUB 17000
  338. 16321 PE = P + 1
  339. 16322 NE% = PE   : REM NUMBER ENTRIES
  340. 16325 PRINT#2,NE%  : REM FOR FUTURE LOAD
  341. 16400 FOR I = 1 TO P
  342. 16410 PRINT#2,I$(I)CHR$(13);
  343. 16420 NEXT I
  344. 16450 CLOSE 2
  345. 16500 GOSUB 17000
  346. 16505 PRINT"FINISHED WRITING FILE TO DISK "
  347. 16510 PRINT"NAME = ";YN$
  348. 16600 CLOSE 15
  349. 16900 GOTO 4500
  350. 17000 :
  351. 17010 REM DISK STATUS.
  352. 17020 :
  353. 17100 INPUT#15,ZN,ZS$,ZT,ZY
  354. 17200 IF ZN=0 THEN RETURN
  355. 17210 PRINT"DISK ERROR ... "
  356. 17300 PRINT ZN;ZS$;ZT;ZY
  357. 17320 CLOSE 2
  358. 17400 STOP
  359. 17900 :
  360. 17910 :
  361.